Subject: AD
Envivo Bio, Inc.; Confidential
Figure 1 is an interactive figure showing the microbial community
composition in each collected sample. Here, each color and shade
corresponds to a different genus. For reference, domestic dogs
(Canis familiaris) and gray wolves (Canis lupus) are
different species that belong to the same genus (Canis).
You can interact with this figure by:
- Hovering the cursor over a color in the stacked bar to see the
taxonomic identity, sample type, and relative abundance corresponding to
that color and bar
- Clicking and dragging the cursor over a portion of the figure to
zoom
- Single-clicking a genus’s name in the legend to remove that genus
from the figure
- Double-clicking (very quickly) a genus’s name in the legend
to only show that genus
Figure 1: Microbial community composition of
collected saliva and CapScan samples. CapScan samples are ordered from
proximal to distal intestine (i.e., increasing
distance from mouth). Taxonomic composition is reported at the genus
rank. Genera present at <1% relative abundance across all samples are
reported as “Other genera”. Note: Blue = Firmicutes;
Yellow = Actinomycetes; Green = Bacteroidetes; Red =
Proteobacteria; Purple = all other phyla. Shades of the same
color (except purple) correspond to different genera from the same
phylum.
Figure 2 is an interactive figure showing the microbial community
composition at higher taxononomic resolution. Here, each row corresponds
to a unique microbe.
You can interact with this figure by:
- Hovering the cursor over a cell to see that microbe’s genus and
species (and strain when available), relative abundance, and full
taxonomic classification
- Clicking and dragging the cursor over a portion of the figure to
zoom
Figure 2: Heat map showing relative abundance of
microbes in each sample (N = 238 total identified). Each row corresponds
to a unique microbe and each column corresponds to an individual sample.
Note the relative abundance colorscale is in log units.
1.3 Notable microbes detected
- Streptococcus anginosus:
- Previously shown to produce an antimicrobial protein (“angicin”)
that disrupts the cell membrane of closely related organisms, giving
Streptococcus anginosus a competitive advantage (Vogel et
al., 2021)
- Second most relatively abundant microbe in proximal CapScan sample
(~13%)
- Faecalibacterium prausnitzii:
- Previously shown to produce a small protein that alleviates gut
inflammation in mouse models (Quévrain et al., 2017)
- Found at ~4% relative abundance in distal CapScan samples
1.4 References
Quévrain, E., Maubert, M.A., Michon, C., Chain, F., Marquant, R.,
Tailhades, J., et al. (2017) Identification of an
anti-inflammatory protein from Faecalibacterium prausnitzii, a
commensal bacterium deficient in Crohn’s disease. Gut
65: 415–425.
Vogel, V., Bauer, R., Mauerer, S., Schiffelholz, N., Haupt, C.,
Seibold, G.M., et al. (2021) Angicin, a novel bacteriocin of
Streptococcus anginosus. Sci Rep 11:
1–16.
LS0tCnRpdGxlOiAiPGJyPiBUYXhvbm9taWMgcHJvZmlsaW5nIG9mIGJhY3RlcmlhbCBhbmQgYXJjaGFlYWwgY29tbXVuaXRpZXMgZnJvbSBzYWxpdmEgYW5kIENhcFNjYW4tc2FtcGxlZCBndXQgbWV0YWdlbm9tZXMiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgotLS0KCjxzdHlsZT4KZGl2LmhpZ2hsaWdodCB7CmJhY2tncm91bmQtY29sb3I6ICNGMkYyRjI7CnBhZGRpbmc6IDBweDsKYm9yZGVyLXJhZGl1czogMnB4Owp9Cgo8L3N0eWxlPgoKIyMjIDxiPjxpPlN1YmplY3Q6IEFEPC9iPjwvaT4KKkVudml2byBCaW8sIEluYy47IENvbmZpZGVudGlhbCoKCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBhZGQgbG9nbywgZWNobyA9IEZBTFNFfQpsb2dvX3BhdGggPC0gIi4uL2xvZ28vZW52aXZvLnN2ZyIKCmh0bWx0b29sczo6aW1nKHNyYyA9IGtuaXRyOjppbWFnZV91cmkobG9nb19wYXRoKSwgCiAgICAgICAgICAgICAgIGFsdCA9ICJsb2dvIiwgCiAgICAgICAgICAgICAgIHN0eWxlID0gInBvc2l0aW9uOmFic29sdXRlOyB0b3A6MDsgcmlnaHQ6MDsgcGFkZGluZzoxMHB4OyB3aWR0aDogMTQ1cHg7IGhlaWdodDogNDJweCIpCmBgYAoKYGBge3IgbG9hZCBwYWNrYWdlcywgaW5jbHVkZSA9IEZBTFNFfQojIExpc3QgcmVxdWlyZWQgcGFja2FnZXMKY3JhblBhY2thZ2VzIDwtIGMoIkJpb2NNYW5hZ2VyIiwgImdncGxvdDIiLCAiZHBseXIiLCAidGlkeXIiLAogICAgICAgICAgICAgICAgICAiYXBlIiwgImdncGxvdDIiLCAicmVzaGFwZTIiLCAicGxvdGx5IiwgImhlYXRtYXBseSIpCmJpb2NQYWNrYWdlcyA8LSBjKCJwaHlsb3NlcSIsICJCaW9zdHJpbmdzIikKCiMgSW5zdGFsbCBtaXNzaW5nIENSQU4gcGFja2FnZXMKaW5zdGFsbGVkQ1JBTiA8LSBjcmFuUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRDUkFOID09IEZBTFNFKSkgewogIGluc3RhbGwucGFja2FnZXMoY3JhblBhY2thZ2VzWyFpbnN0YWxsZWRDUkFOXSwKICAgICAgICAgICAgICAgICAgIHJlcG9zID0gJ2h0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmcnKQp9CgojIEluc3RhbGwgbWlzc2luZyBCaW9jb25kdWN0b3IgcGFja2FnZXMKaW5zdGFsbGVkQmlvYyA8LSBiaW9jUGFja2FnZXMgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkKaWYgKGFueShpbnN0YWxsZWRCaW9jID09IEZBTFNFKSkgewogIEJpb2NNYW5hZ2VyOjppbnN0YWxsKGJpb2NQYWNrYWdlc1shaW5zdGFsbGVkQmlvY10pCn0KCiMgTG9hZCBwYWNrYWdlcwpsYXBwbHkoYyhjcmFuUGFja2FnZXMsIGJpb2NQYWNrYWdlcyksIGxpYnJhcnksIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKYGBgCgpgYGB7ciBsb2FkIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2FkIENvc21vc0lEIGRhdGEgYW5kIGZvcm1hdHRlZCBtZXRhZGF0YQpjb3Ntb3MgPC0gcmVhZC5jc3YoZmlsZSA9ICIuLi9kYXRhL0NQMDQ2MThfY29zbW9zaWRfMjAyMjA5MDYuY3N2IikKbWV0YSA8LSByZWFkLmNzdihmaWxlID0gIi4uL2RhdGEvQ1AwNDYxOF9tZXRhZGF0YS5jc3YiKQpgYGAKCmBgYHtyIGZvcm1hdCBkYXRhLCBpbmNsdWRlID0gRkFMU0V9CiMgUHJlcGFyZSB0YXhfdGFibGUgYW5kIG90dV90YWJsZSBvYmplY3RzCnRheCA8LSBjb3Ntb3MgJT4lCiAgc2VsZWN0KFBoeWx1bSwgQ2xhc3MsIE9yZGVyLCBGYW1pbHksIEdlbnVzLCBTcGVjaWVzLCBTdHJhaW4pICU+JQogIGFzLm1hdHJpeCAlPiUKICB0YXhfdGFibGUKCnN0YXJ0X2luZCA8LSBncmVwKCJTdHJhaW4iLCBjb2xuYW1lcyhjb3Ntb3MpKSsxCnN0b3BfaW5kIDwtIG5jb2woY29zbW9zKS0yCmFidW5kYW5jZV9zY29yZXMgPC0gY29zbW9zWyxzdGFydF9pbmQ6c3RvcF9pbmRdICU+JSBvdHVfdGFibGUoLiwgdGF4YV9hcmVfcm93cyA9IFRSVUUpCgojIFJlZm9ybWF0IHNhbXBsZSBuYW1lcyBhbmQgbWV0YWRhdGEgc2FtcGxlIG5hbWVzIHNvIHRoZXkgbWF0Y2gKY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgPC0gY29sbmFtZXMoYWJ1bmRhbmNlX3Njb3JlcykgJT4lCiAgZ3N1YigiWCIsICIiLCAuKSAlPiUKICBnc3ViKCJfLioiLCAiIiwgLikgJT4lCiAgcGFzdGUwKCJFQl8iLCAuKQoKcm93Lm5hbWVzKG1ldGEpIDwtIG1ldGEgJT4lCiAgcHVsbChTYW1wbGVfbnVtYmVyKSAlPiUKICBwYXN0ZTAoIkVCXyIsIC4pCgpzYW1fZGF0YSA8LSBzYW1wbGVfZGF0YShtZXRhKQpgYGAKCmBgYHtyIGJ1aWxkIHBoeWxvc2VxLCBpbmNsdWRlID0gRkFMU0V9CiMgQnVpbGQgcGh5bG9zZXEgb2JqZWN0CnBzIDwtIHBoeWxvc2VxKHRheCwgYWJ1bmRhbmNlX3Njb3Jlcywgc2FtX2RhdGEpCmBgYAoKYGBge3IgdHJhbnNmb3JtIGRhdGEsIGluY2x1ZGUgPSBGQUxTRX0KIyBMb2cgdHJhbnNmb3JtCnBzTG9nIDwtIHBzICU+JSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyguLCBmdW5jdGlvbih4KSBsb2coeCArIDEsIGJhc2UgPSAxMCkpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNSQSA8LSBwcyAlPiUgdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMoLiwgZnVuY3Rpb24oeCkgeC9zdW0oeCkqMTAwKQpgYGAKCmBgYHtyIHJhbmsgcGh5bGEsIGluY2x1ZGUgPSBGQUxTRX0KcGh5X3JhbmsgPC0gcHNSQSAlPiUKICB0YXhfZ2xvbSguLCB0YXhyYW5rID0gIlBoeWx1bSIpICU+JQogIHBzbWVsdCAlPiUKICBncm91cF9ieShQaHlsdW0pICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oQWJ1bmRhbmNlKSkKCnBoeV9yYW5rICU+JSBhcnJhbmdlKGRlc2MobWVkaWFuKSkKYGBgCgpgYGB7ciBzdWJqZWN0IHN1YnNldCwgaW5jbHVkZSA9IEZBTFNFfQojIFNldCBzdWJqZWN0CnN1YmplY3QgPC0gIkFEIgoKIyBTdWJzZXQgdG8gc3ViamVjdCBzYW1wbGVzIGFuZCBkcm9wIG1pc3NpbmcgdGF4YQpwc1N1YiA8LSBzdWJzZXRfc2FtcGxlcyhwcywgU3ViamVjdCA9PSBzdWJqZWN0KSAlPiUKICBwcnVuZV90YXhhKHRheGFfc3VtcyguKSA+IDAsIC4pCgojIEFkZCBwbG90IGxhYmVsIGZvciBlYWNoIHNhbXBsZQpzYW1wbGVfZGF0YShwc1N1YikkUGxvdF9sYWJlbCA8LSBwYXN0ZTAoc2FtcGxlX25hbWVzKHBzU3ViKSwgIiAoIiwgc2FtcGxlX2RhdGEocHNTdWIpJFNhbXBsZV90eXBlLCAiKSIpCgojIFJlbGF0aXZlIGFidW5kYW5jZSB0cmFuc2Zvcm0KcHNTdWJfcmEgPC0gcHNTdWIgJT4lIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKC4sIGZ1bmN0aW9uKHgpIHgvc3VtKHgpKjEwMCkKYGBgCgpgYGB7ciBwbG90IGJhciwgaW5jbHVkZSA9IEZBTFNFfQojIERlZmluZSBOT1QgSU4gb3BlcmF0b3IKJyUhaW4lJyA8LSBmdW5jdGlvbih4LHkpISgnJWluJScoeCx5KSkKCiMgQWdnbG9tZXJhdGUgYXQgR2VudXMgYW5kIG1lbHQKdGF4cmFuayA8LSAiR2VudXMiCm1lbHQgPC0gcHNTdWJfcmEgJT4lIHRheF9nbG9tKC4sIHRheHJhbmsgPSB0YXhyYW5rKSAlPiUgcHNtZWx0CgojIERlZmluZSBtYWpvciBwaHlsYQptYWpvcl9waHkgPC0gYygiRmlybWljdXRlcyIsICJBY3Rpbm9iYWN0ZXJpYSIsICJCYWN0ZXJvaWRldGVzIiwgIlByb3Rlb2JhY3RlcmlhIikKCiMgSWRlbnRpZnkgZ2VuZXJhIHByZXNlbnQgaW4gPDElIHJlbGF0aXZlIGFidW5kYW5jZSBpbiBhbGwgc2FtcGxlcwpyYXJlX2dlbmVyYSA8LSBtZWx0ICU+JQogIGdyb3VwX2J5KFNhbXBsZV9udW1iZXIsIEdlbnVzKSAlPiUKICBzdW1tYXJpemUoc3VtID0gc3VtKEFidW5kYW5jZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShHZW51cykgJT4lCiAgc3VtbWFyaXplKG1heCA9IG1heChzdW0pKSAlPiUKICBmaWx0ZXIobWF4IDwgMSkgJT4lCiAgcHVsbChHZW51cykKCiMgQ3JlYXRlIG5ldyBjb2x1bW4gY29udGFpbmluZyBuYW1lIG9mIGdlbnVzIGlmIGFib3ZlIGN1dG9mZiBvciAiT3RoZXIgZ2VuZXJhIiBpZiBub3QKZGYgPC0gbWVsdCAlPiUKICBtdXRhdGUoUGh5X2dyb3VwID0gY2FzZV93aGVuKFBoeWx1bSAlIWluJSBtYWpvcl9waHkgfiAiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBQaHlsdW0pLAogICAgICAgICBQaHlfZ3JvdXAgPSBjYXNlX3doZW4oR2VudXMgJWluJSByYXJlX2dlbmVyYSB+ICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IFBoeV9ncm91cCksCiAgICAgICAgIFRheF9sYWJlbCA9IGNhc2Vfd2hlbihHZW51cyAlaW4lIHJhcmVfZ2VuZXJhIH4gIkFhT3RoZXIgZ2VuZXJhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBHZW51cykpICU+JQogIGdyb3VwX2J5KFN1YmplY3QpICU+JQogIGFycmFuZ2UoU3ViamVjdCwgU2FtcGxlX3R5cGUpCgojIERlZmluZSBvcmRlcgpwaHlfb3JkZXIgPC0gYygiT3RoZXIgcGh5bHVtIiwKICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiwKICAgICAgICAgICAgICAgIkJhY3Rlcm9pZGV0ZXMiLAogICAgICAgICAgICAgICAiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAiRmlybWljdXRlcyIpICU+JSByZXYKCmdlbl9vcmRlciA8LSBkZiAlPiUKICBzZWxlY3QoUGh5X2dyb3VwLCBUYXhfbGFiZWwpICU+JQogIG11dGF0ZShPcmRlciA9IG1hdGNoKFBoeV9ncm91cCwgcGh5X29yZGVyKSkgJT4lCiAgYXJyYW5nZShPcmRlciwgZGVzYyhUYXhfbGFiZWwpKSAlPiUKICBkaXN0aW5jdCAlPiUKICBwdWxsKFRheF9sYWJlbCkKCmdlbl9vcmRlciA8LSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIGdlbl9vcmRlciksIGxldmVscyA9IGdzdWIoIl5BYSIsICIiLCBnZW5fb3JkZXIpKSAjIHRoZSBBYSBpcyB0byBtYWtlIHN1cmUgIk90aGVyIiBpcyBwbG90dGVkIGF0IHRoZSB0b3AKCmRmIDwtIGRmICU+JQogIG11dGF0ZShUYXhfbGFiZWwgPSBmYWN0b3IoZ3N1YigiXkFhIiwgIiIsIFRheF9sYWJlbCksIGxldmVscyA9IGdlbl9vcmRlcikpCgojIERlZmluZSBjb2xvcnMKcGh5X2NvbG9yIDwtIGRhdGEuZnJhbWUoUGh5bHVtID0gYygiQWN0aW5vYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdGhlciBwaHlsdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlybWljdXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Rlb2JhY3RlcmlhIiksCiAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VfY29sb3IgPSBjKCIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiM4MzJDRkYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIzY0QzYyQSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNFOTNCNEYiKSkKCnBoeV9jb2xvciA8LSBwaHlfY29sb3JbbWF0Y2gocGh5X29yZGVyLCBwaHlfY29sb3IkUGh5bHVtKSxdCgojIERhdGEgZnJhbWUgYXMgaW5wdXQsIGRhdGEgZnJhbWUgd2l0aCBuZXcgY29sdW1uIG9mIGhleCBjb2RlcyBhcyBvdXRwdXQKY29sX3BhbGV0dGUgPC0gZGYgJT4lCiAgc2VsZWN0KFBoeV9ncm91cCwgVGF4X2xhYmVsKSAlPiUKICBkaXN0aW5jdCAlPiUKICBtdXRhdGUoSGV4X2NvZGUgPSBOQSkKCgpmb3IocGh5IGluIHBoeV9jb2xvciRQaHlsdW0pIHsKICB0ZXN0IDwtIGNvbF9wYWxldHRlICU+JQogICAgZmlsdGVyKFBoeV9ncm91cCA9PSBwaHkpICU+JQogICAgcHVsbChUYXhfbGFiZWwpICU+JQogICAgZHJvcGxldmVscyAlPiUKICAgIGxldmVscwogIAogIHRheC5jb2xvciA8LSBjb2xvclJhbXBQYWxldHRlKGMocGh5X2NvbG9yJEJhc2VfY29sb3JbbWF0Y2gocGh5LCBwaHlfY29sb3IkUGh5bHVtKV0sICJ3aGl0ZSIpKQogIGNvbHRlc3QgPC0gdGF4LmNvbG9yKGxlbmd0aCh0ZXN0KSsyKSAlPiUKICAgIC5bLWxlbmd0aCguKV0KICBjb2xfcGFsZXR0ZSRIZXhfY29kZVttYXRjaCh0ZXN0LCBjb2xfcGFsZXR0ZSRUYXhfbGFiZWwpXSA8LSBjb2x0ZXN0Cn0KCmNvbF9wYWxldHRlIDwtIGNvbF9wYWxldHRlICU+JSBhcnJhbmdlKGZhY3RvcihUYXhfbGFiZWwsIGxldmVscyA9IGdlbl9vcmRlcikpCmBgYAoKPGRpdiBjbGFzcz0iaGlnaGxpZ2h0Ij4KIyMjIDEuMSBPdmVydmlldyBvZiBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uCjwvZGl2PgoKRmlndXJlIDEgaXMgYW4gaW50ZXJhY3RpdmUgZmlndXJlIHNob3dpbmcgdGhlIG1pY3JvYmlhbCBjb21tdW5pdHkgY29tcG9zaXRpb24gaW4gZWFjaCBjb2xsZWN0ZWQgc2FtcGxlLiBIZXJlLCBlYWNoIGNvbG9yIGFuZCBzaGFkZSBjb3JyZXNwb25kcyB0byBhIGRpZmZlcmVudCBnZW51cy4gRm9yIHJlZmVyZW5jZSwgZG9tZXN0aWMgZG9ncyAoKkNhbmlzIGZhbWlsaWFyaXMqKSBhbmQgZ3JheSB3b2x2ZXMgKCpDYW5pcyBsdXB1cyopIGFyZSBkaWZmZXJlbnQgc3BlY2llcyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBnZW51cyAoKkNhbmlzKikuCjxicj48YnI+CllvdSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGlzIGZpZ3VyZSBieToKCiogSG92ZXJpbmcgdGhlIGN1cnNvciBvdmVyIGEgY29sb3IgaW4gdGhlIHN0YWNrZWQgYmFyIHRvIHNlZSB0aGUgdGF4b25vbWljIGlkZW50aXR5LCBzYW1wbGUgdHlwZSwgYW5kIHJlbGF0aXZlIGFidW5kYW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoYXQgY29sb3IgYW5kIGJhcgoqIENsaWNraW5nIGFuZCBkcmFnZ2luZyB0aGUgY3Vyc29yIG92ZXIgYSBwb3J0aW9uIG9mIHRoZSBmaWd1cmUgdG8gem9vbQoqIFNpbmdsZS1jbGlja2luZyBhIGdlbnVzJ3MgbmFtZSBpbiB0aGUgbGVnZW5kIHRvIHJlbW92ZSB0aGF0IGdlbnVzIGZyb20gdGhlIGZpZ3VyZQoqIERvdWJsZS1jbGlja2luZyAoPHU+dmVyeSBxdWlja2x5PC91PikgYSBnZW51cydzIG5hbWUgaW4gdGhlIGxlZ2VuZCB0byBvbmx5IHNob3cgdGhhdCBnZW51cwpgYGB7ciwgb3V0LndpZHRoID0gIjEwMCUiLCBlY2hvID0gRkFMU0V9CiMgUGxvdApwQmFyIDwtIHBsb3RfbHkoZGYsIHggPSB+UGxvdF9sYWJlbCwgeSA9IH5BYnVuZGFuY2UsIHR5cGUgPSAiYmFyIiwKICAgICAgICAgICAgIGNvbG9yID0gflRheF9sYWJlbCwgY29sb3JzID0gY29sX3BhbGV0dGUkSGV4X2NvZGUsCiAgICAgICAgICAgICB0ZXh0cG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCI8Yj5HZW51czo8L2I+IiwgVGF4X2xhYmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPjxicj4iLCAiPGI+U2FtcGxlIHR5cGU6PC9iPiIsIFNhbXBsZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsICI8Yj5SZWxhdGl2ZSBhYnVuZGFuY2U6PC9iPiIsIHBhc3RlMChyb3VuZChBYnVuZGFuY2UsIGRpZ2l0cyA9IDEpLCAiJSIpKSwKICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IikgJT4lCiAgbGF5b3V0KHhheGlzID0gbGlzdCh0aXRsZSA9ICI8Yj5TYW1wbGU8L2I+IiwKICAgICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIjxiPlJlbGF0aXZlIGFidW5kYW5jZSAoJSk8L2I+IiwKICAgICAgICAgICAgICAgICAgICAgIHRpY2tzID0gIm91dHNpZGUiKSwKICAgICAgICAgYmFybW9kZSA9ICJzdGFjayIsCiAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJBcmlhbCIpKQoKcEJhciR4JGxheW91dCR5YXhpcyRsaW5lY29sb3IgPC0gIiMwMDAwMDAiCnBCYXIKYGBgCioqRmlndXJlIDE6KiogTWljcm9iaWFsIGNvbW11bml0eSBjb21wb3NpdGlvbiBvZiBjb2xsZWN0ZWQgc2FsaXZhIGFuZCBDYXBTY2FuIHNhbXBsZXMuIENhcFNjYW4gc2FtcGxlcyBhcmUgb3JkZXJlZCBmcm9tIHByb3hpbWFsIHRvIGRpc3RhbCBpbnRlc3RpbmUgKCppKi4qZSouLCBpbmNyZWFzaW5nIGRpc3RhbmNlIGZyb20gbW91dGgpLiBUYXhvbm9taWMgY29tcG9zaXRpb24gaXMgcmVwb3J0ZWQgYXQgdGhlIGdlbnVzIHJhbmsuIEdlbmVyYSBwcmVzZW50IGF0IDwxJSByZWxhdGl2ZSBhYnVuZGFuY2UgYWNyb3NzIGFsbCBzYW1wbGVzIGFyZSByZXBvcnRlZCBhcyAiT3RoZXIgZ2VuZXJhIi4gPHU+Tm90ZTo8L3U+IEJsdWUgPSAqRmlybWljdXRlcyo7IFllbGxvdyA9ICpBY3Rpbm9teWNldGVzKjsgR3JlZW4gPSAqQmFjdGVyb2lkZXRlcyo7IFJlZCA9ICpQcm90ZW9iYWN0ZXJpYSo7IFB1cnBsZSA9IGFsbCBvdGhlciBwaHlsYS4gU2hhZGVzIG9mIHRoZSBzYW1lIGNvbG9yIChleGNlcHQgcHVycGxlKSBjb3JyZXNwb25kIHRvIGRpZmZlcmVudCBnZW5lcmEgZnJvbSB0aGUgc2FtZSBwaHlsdW0uCgpgYGB7ciwgaW5jbHVkZSA9IEZBTFNFfQojIE9yZGluYXRpb24tYmFzZWQKcEhlYXRfb3JkIDwtIHBsb3RfaGVhdG1hcChwc1N1Yl9yYSwgbWV0aG9kID0gIk5NRFMiLCBkaXN0YW5jZSA9ICJicmF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0YXhhLmxhYmVsID0gIlN0cmFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmxhYmVsID0gMzAwKQoKIyBSZXRyaWV2ZSByb3cgYW5kIHRheG9uIG9yZGVycwpyb3dfb3JkZXIgPC0gcEhlYXRfb3JkJHBsb3RfZW52JHRheGEub3JkZXIgJT4lIHJldgp0YXhfb3JkZXIgPC0gdGF4X3RhYmxlKHBzU3ViX3JhKVttYXRjaChyb3dfb3JkZXIsIHJvd25hbWVzKHRheF90YWJsZShwc1N1Yl9yYSkpKSxdICU+JQogIGFzLmRhdGEuZnJhbWUgJT4lCiAgbXV0YXRlKHRheG9uID0gcm93bmFtZXMoLiksCiAgICAgICAgIEFidW5kYW5jZSA9IDEsCiAgICAgICAgIFNhbXBsZSA9IHN1YmplY3QpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGQUxTRX0KIyBQcmVwYXJlIGRhdGEKeCA8LSBwc1N1Yl9yYSAlPiUgb3R1X3RhYmxlICU+JSBhcy5kYXRhLmZyYW1lCmNvbG5hbWVzKHgpIDwtIGxhcHBseShjb2xuYW1lcyh4KSwgZ3JlcCwgc2FtcGxlX2RhdGEocHNTdWJfcmEpJFBsb3RfbGFiZWwsIHZhbHVlID0gVFJVRSkgJT4lIHVubGlzdAoKIyBBZGQgdGF4b25vbXkKeCA8LSBjYmluZCh4LCB0YXhfdGFibGUocHNTdWJfcmEpKQoKIyBSZW9yZGVyIHJvd3MgYW5kIGNvbHVtbnMgdG8gbWF0Y2ggb3JkaW5hdGlvbgp4IDwtIHhbbWF0Y2gocm93X29yZGVyLCByb3duYW1lcyh4KSksXQoKIyBTZXQgaG92ZXJ0ZXh0Cm5zYW1wIDwtIG5zYW1wbGVzKHBzU3ViX3JhKQpob3Zlcl9zdHJhaW4gPC0geFssIDE6bnNhbXBdCmhvdmVyX3N0cmFpbltdIDwtIHBhc3RlMCgiPGI+TWljcm9iZTo8L2I+ICIsIHgkU3RyYWluLCAiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIjxiPlJlbGF0aXZlIGFidW5kYW5jZTo8L2I+ICIpCmhvdmVyX3N0cmFpbiA8LSBhcy5tYXRyaXgoaG92ZXJfc3RyYWluKQoKaG92ZXJfYWJ1bmQgPC0geFssIDE6bnNhbXBdICU+JSByb3VuZCguLCBkaWdpdHMgPSAyKSAlPiUgYXMuZGF0YS5mcmFtZQpob3Zlcl9hYnVuZCA8LSBhcHBseShob3Zlcl9hYnVuZCwgMiwgcGFzdGUwLCAiJSIpCmhvdmVyX2FidW5kIDwtIGFzLm1hdHJpeChob3Zlcl9hYnVuZCkKCmhvdmVyX3RheCA8LSB4WywgMTpuc2FtcF0KaG92ZXJfdGF4W10gPC0gcGFzdGUwKCJcbiBcbjxiPlBoeWx1bTo8L2I+ICIsIHgkUGh5bHVtLCAiXG4iLAogICAgICAgICAgICAgICAgICAgIjxiPkNsYXNzOjwvYj4gIiwgeCRDbGFzcywgIlxuIiwKICAgICAgICAgICAgICAgICAgICI8Yj5PcmRlcjo8L2I+ICIsIHgkT3JkZXIsICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+RmFtaWx5OjwvYj4gIiwgeCRGYW1pbHksICJcbiIsCiAgICAgICAgICAgICAgICAgICAiPGI+R2VudXM6PC9iPiAiLCB4JEdlbnVzLCAiXG4iKQpob3Zlcl90YXggPC0gYXMubWF0cml4KGhvdmVyX3RheCkKCmhvdmVydGV4dCA8LSBtYXRyaXgocGFzdGUwKGhvdmVyX3N0cmFpbiwgaG92ZXJfYWJ1bmQsIGhvdmVyX3RheCksCiAgICAgICAgICAgICAgICBucm93ID0gbnJvdyhob3Zlcl90YXgpLCBuY29sID0gbmNvbChob3Zlcl90YXgpKQoKIyBQZXJmb3JtIGxvZzEwIHRyYW5zZm9ybWF0aW9uIG9uIHJlbGF0aXZlIGFidW5kYW5jZXMKZGF0YSA8LSBsb2coeFssIDE6bnNhbXBdLCBiYXNlID0gMTApCmRhdGFbc2FwcGx5KGRhdGEsIGlzLmluZmluaXRlKV0gPC0gTkEKYGBgCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4yIEhpZ2gtcmVzb2x1dGlvbiBzbmFwc2hvdCBvZiBjb21tdW5pdHkgY29tcG9zaXRpb24KPC9kaXY+CkZpZ3VyZSAyIGlzIGFuIGludGVyYWN0aXZlIGZpZ3VyZSBzaG93aW5nIHRoZSBtaWNyb2JpYWwgY29tbXVuaXR5IGNvbXBvc2l0aW9uIGF0IGhpZ2hlciB0YXhvbm9ub21pYyByZXNvbHV0aW9uLiBIZXJlLCBlYWNoIHJvdyBjb3JyZXNwb25kcyB0byBhIHVuaXF1ZSBtaWNyb2JlLgo8YnI+PGJyPgpZb3UgY2FuIGludGVyYWN0IHdpdGggdGhpcyBmaWd1cmUgYnk6CgoqIEhvdmVyaW5nIHRoZSBjdXJzb3Igb3ZlciBhIGNlbGwgdG8gc2VlIHRoYXQgbWljcm9iZSdzIGdlbnVzIGFuZCBzcGVjaWVzIChhbmQgc3RyYWluIHdoZW4gYXZhaWxhYmxlKSwgcmVsYXRpdmUgYWJ1bmRhbmNlLCBhbmQgZnVsbCB0YXhvbm9taWMgY2xhc3NpZmljYXRpb24KKiBDbGlja2luZyBhbmQgZHJhZ2dpbmcgdGhlIGN1cnNvciBvdmVyIGEgcG9ydGlvbiBvZiB0aGUgZmlndXJlIHRvIHpvb20KCjxicj48YnI+CmBgYHtyLCBvdXQuaGVpZ2h0ID0gIjc1MHB4IiwgZWNobyA9IEZBTFNFfQojIFNldCBzYW1wbGUgbmFtZXMKI2NvbG5hbWVzKGRhdGEpIDwtIGMoIkVCXzI2OSAoc2FsaXZhKSIsICJFQl8yNzAgKENhcFNjYW4pIiwgIkVCXzI3MSAoQ2FwU2NhbikiLAojICAgICAgICAgICAgICAgICAgICAiRUJfMjcyIChDYXBTY2FuKSIsICJFQl8yNzMgKENhcFNjYW4pIiwgIkVCXzI3NCAoc3Rvb2wpIikKCiMgUHJlcGFyZSB0YXhvbm9teSByb3cgc2lkZQpyb3dfc2lkZSA8LSB4ICU+JSBzZWxlY3QoUGh5bHVtKQpyb3dfc2lkZSRQaHlsdW1bcm93X3NpZGUkUGh5bHVtICUhaW4lIG1ham9yX3BoeV0gPC0gIk90aGVyIHBoeWxhIgpyb3dfc2lkZSRQaHlsdW0gPC0gZmFjdG9yKHJvd19zaWRlJFBoeWx1bSwgbGV2ZWxzID0gYygiT3RoZXIgcGh5bGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvdGVvYmFjdGVyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFjdGVyb2lkZXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpbm9iYWN0ZXJpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIikpCgojIFBsb3QKcEhlYXQgPC0gaGVhdG1hcGx5KGRhdGEsCiAgICAgICAgICAgICAgICAgICBSb3d2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBDb2x2ID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSB2aXJpZGlzOjp2aXJpZGlzKDEwKSwKICAgICAgICAgICAgICAgICAgIHJvd19zaWRlX2NvbG9ycyA9IHJvd19zaWRlLAogICAgICAgICAgICAgICAgICAgcm93X3NpZGVfcGFsZXR0ZSA9IGMoIkFjdGlub2JhY3RlcmlhIiA9ICIjRkZCNzI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYWN0ZXJvaWRldGVzIiA9ICIjNjRDNjJBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXJtaWN1dGVzIiA9ICIjMDcyQUM4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm90ZW9iYWN0ZXJpYSIgPSAiI0U5M0I0RiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3RoZXIgcGh5bGEiID0gIiM4MzJDRkYiKSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3RfbWFyZ2luID0gMC4wMSwKICAgICAgICAgICAgICAgICAgIHN1YnBsb3Rfd2lkdGhzID0gYygwLjksIDAuMDcpLAogICAgICAgICAgICAgICAgICAgc2lkZV9jb2xvcl9jb2xvcmJhcl9sZW4gPSAwLjMsCiAgICAgICAgICAgICAgICAgICBwbG90X21ldGhvZCA9ICJwbG90bHkiLAogICAgICAgICAgICAgICAgICAgY3VzdG9tX2hvdmVydGV4dCA9IGhvdmVydGV4dCwKICAgICAgICAgICAgICAgICAgIHhsYWIgPSAiPGI+U2FtcGxlPC9iPiIsCiAgICAgICAgICAgICAgICAgICB5bGFiID0gIjxiPk1pY3JvYmU8L2I+IiwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3hwb3MgPSAxLjAxOSwKICAgICAgICAgICAgICAgICAgIGNvbG9yYmFyX3lwb3MgPSAwLjUsCiAgICAgICAgICAgICAgICAgICBjb2xvcmJhcl9sZW4gPSAwLjMpICU+JQogIGxheW91dCh4YXhpcyA9IGxpc3Qoc2hvd2dyaWQgPSBGQUxTRSksCiAgICAgICAgIHlheGlzID0gbGlzdChzaG93Z3JpZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgc2hvd3RpY2tsYWJlbHMgPSBGQUxTRSksCiAgICAgICAgIGZvbnQgPSBsaXN0KGZhbWlseSA9ICJBcmlhbCIpKSAlPiUKICBjb2xvcmJhcih0aXRsZSA9ICJSZWxhdGl2ZSBhYnVuZGFuY2UiLAogICAgICAgICAgIHRpY2t2YWxzID0gYygtMSwgMCwgMSksCiAgICAgICAgICAgdGlja3RleHQgPSBjKCIwLjElIiwgIjElIiwgIjEwJSIpKQoKIyBGb3JtYXQgcm93IHNpZGUKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJHRpY2t0ZXh0IDwtICJQaHlsdW0iCnBIZWF0JHgkbGF5b3V0JHhheGlzJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeGF4aXMyJGxpbmVjb2xvciA8LSAiIzAwMDAwMCIKcEhlYXQkeCRsYXlvdXQkeWF4aXMkbGluZWNvbG9yIDwtICIjMDAwMDAwIgpwSGVhdCR4JGxheW91dCRsZWdlbmQkeWFuY2hvciA8LSAiYm90dG9tIgpwSGVhdApgYGAKKipGaWd1cmUgMjoqKiBIZWF0IG1hcCBzaG93aW5nIHJlbGF0aXZlIGFidW5kYW5jZSBvZiBtaWNyb2JlcyBpbiBlYWNoIHNhbXBsZSAoTiA9IDIzOCB0b3RhbCBpZGVudGlmaWVkKS4gRWFjaCByb3cgY29ycmVzcG9uZHMgdG8gYSB1bmlxdWUgbWljcm9iZSBhbmQgZWFjaCBjb2x1bW4gY29ycmVzcG9uZHMgdG8gYW4gaW5kaXZpZHVhbCBzYW1wbGUuIE5vdGUgdGhlIHJlbGF0aXZlIGFidW5kYW5jZSBjb2xvcnNjYWxlIGlzIGluIGxvZyB1bml0cy4KCjxicj48YnI+Cgo8ZGl2IGNsYXNzPSJoaWdobGlnaHQiPgojIyMgMS4zIE5vdGFibGUgbWljcm9iZXMgZGV0ZWN0ZWQKPC9kaXY+CgoqICpTdHJlcHRvY29jY3VzIGFuZ2lub3N1cyo6CiAgKiBQcmV2aW91c2x5IHNob3duIHRvIHByb2R1Y2UgYW4gYW50aW1pY3JvYmlhbCBwcm90ZWluICgiYW5naWNpbiIpIHRoYXQgZGlzcnVwdHMgdGhlIGNlbGwgbWVtYnJhbmUgb2YgY2xvc2VseSByZWxhdGVkIG9yZ2FuaXNtcywgZ2l2aW5nICpTdHJlcHRvY29jY3VzIGFuZ2lub3N1cyogYSBjb21wZXRpdGl2ZSBhZHZhbnRhZ2UgKFZvZ2VsICpldCBhbCouLCAyMDIxKQogICogU2Vjb25kIG1vc3QgcmVsYXRpdmVseSBhYnVuZGFudCBtaWNyb2JlIGluIHByb3hpbWFsIENhcFNjYW4gc2FtcGxlICh+MTMlKQo8YnI+PGJyPgoqICpGYWVjYWxpYmFjdGVyaXVtIHByYXVzbml0emlpKjoKICAqIFByZXZpb3VzbHkgc2hvd24gdG8gcHJvZHVjZSBhIHNtYWxsIHByb3RlaW4gdGhhdCBhbGxldmlhdGVzIGd1dCBpbmZsYW1tYXRpb24gaW4gbW91c2UgbW9kZWxzIChRdcOpdnJhaW4gKmV0IGFsKi4sIDIwMTcpCiAgKiBGb3VuZCBhdCB+NCUgcmVsYXRpdmUgYWJ1bmRhbmNlIGluIGRpc3RhbCBDYXBTY2FuIHNhbXBsZXMKICAKPGJyPjxicj4KCjxkaXYgY2xhc3M9ImhpZ2hsaWdodCI+CiMjIyAxLjQgUmVmZXJlbmNlcwo8L2Rpdj4KClF1w6l2cmFpbiwgRS4sIE1hdWJlcnQsIE0uQS4sIE1pY2hvbiwgQy4sIENoYWluLCBGLiwgTWFycXVhbnQsIFIuLCBUYWlsaGFkZXMsIEouLCAqZXQgYWwqLiAoMjAxNykgSWRlbnRpZmljYXRpb24gb2YgYW4gYW50aS1pbmZsYW1tYXRvcnkgcHJvdGVpbiBmcm9tICpGYWVjYWxpYmFjdGVyaXVtIHByYXVzbml0emlpKiwgYSBjb21tZW5zYWwgYmFjdGVyaXVtIGRlZmljaWVudCBpbiBDcm9obuKAmXMgZGlzZWFzZS4gKkd1dCogKio2NSoqOiA0MTXigJM0MjUuCgpWb2dlbCwgVi4sIEJhdWVyLCBSLiwgTWF1ZXJlciwgUy4sIFNjaGlmZmVsaG9seiwgTi4sIEhhdXB0LCBDLiwgU2VpYm9sZCwgRy5NLiwgKmV0IGFsKi4gKDIwMjEpIEFuZ2ljaW4sIGEgbm92ZWwgYmFjdGVyaW9jaW4gb2YgKlN0cmVwdG9jb2NjdXMgYW5naW5vc3VzKi4gKlNjaSBSZXAqICoqMTEqKjogMeKAkzE2Lg==